#!/bin/bash

# 钉钉机器人的Webhook URL
DINGTALK_WEBHOOK="https://oapi.dingtalk.com/robot/send?access_token=3a5b106cf41b5709eb147014c24e8b55eff1071dbf28c113363302cc38626244"

# 发送钉钉消息的函数
send_dingtalk_message() {
     local message=$1
     curl -s -H 'Content-Type: application/json' -d "{
         \"msgtype\": \"text\",
         \"text\": {
             \"content\": \"$message\"
         }
    }" $DINGTALK_WEBHOOK
}

# 自动检测日志并发送消息的函数
auto_check_and_notify() {
     local log_file_path=$1
     local error_keyword=$2
     if grep -q "$error_keyword" $log_file_path; then
         send_dingtalk_message "警告：检测到日志错误关键字：$error_keyword"
     fi
}

# 清除所有现有的规则
clear_iptables() {
     iptables -F
     iptables -X
     iptables -t nat -F
     iptables -t nat -X
     iptables -t mangle -F
     iptables -t mangle -X
     echo "所有iptables规则已清除。"
}

# 检测网站链接的函数
check_website() {
     local url=$1
     if curl -s -o /dev/null -w "%{http_code}" $url --silent --head --location; then
         echo "网站可达。"
     else
         echo "网站不可达。"
     fi
}

# 服务器日志查询
log_search() {
     local log_file_path=$1
     local search_term=$2
     if grep -q "$search_term" $log_file_path; then
         echo "日志中找到关键字：$search_term"
     else
         echo "日志中未找到关键字：$search_term"
     fi
}

# 显示菜单
show_menu() {
     echo "请选择一个操作："
     echo "1) 检测网站链接"
     echo "2) 清除iptables规则"
     echo "3) 服务器日志查询"
     echo "4) 退出"
     read -p "输入数字选择操作: " choice
     case $choice in
         1)
             read -p "请输入要检测的网站链接: " WEBSITE_URL
             check_website $WEBSITE_URL
             ;;
         2)
             clear_iptables
             ;;
         3)
             read -p "请输入服务器日志文件路径: " LOG_FILE_PATH
             read -p "请输入要查询的日志关键字: " LOG_SEARCH
             log_search $LOG_FILE_PATH $LOG_SEARCH
             ;;
         4)
             echo "退出程序。"
             exit 0
             ;;
         *)
             echo "无效的选项，请重新选择。"
             ;;
     esac
}

# 监控系统资源并发送警告的函数
monitor_resources() {
    # 设置内存和网络使用率的阈值
    local mem_threshold=80 # 内存使用率超过80%时发送警告
    local net_threshold=90 # 网络使用率超过90%时发送警告

    # 获取当前内存使用率
    local mem_usage=$(free | awk '/Mem/{printf("%.2f"), $3/$2*100}')
    
    # 获取当前网络使用率，这里以eth0接口为例，可能需要根据实际情况更改
    local net_rx_bytes_before=$(cat /sys/class/net/eth0/statistics/rx_bytes)
    sleep 1 # 等待一段时间，以便获取网络使用率
    local net_rx_bytes_after=$(cat /sys/class/net/eth0/statistics/rx_bytes)
    local net_usage=$((($net_rx_bytes_after - $net_rx_bytes_before) * 100 / 125000)) # 假设最大带宽为100Mbps

    # 判断是否需要发送警告
    if (( $(echo "$mem_usage > $mem_threshold" | bc -l) )); then
        send_dingtalk_message "警告：服务器内存使用率过高，当前使用率为$mem_usage%"
    fi

    if (( $(echo "$net_usage > $net_threshold" | bc -l) )); then
        send_dingtalk_message "警告：服务器网络使用率过高，当前使用率为$net_usage%"
    fi
}

# 在后台运行资源监控函数
(monitor_resources; sleep 3600;) &

# 主循环
while true; do
     show_menu
done